// #include "usart.h"
// #include "gd32f4xx.h"
// #include "systick.h"
// #include <stdio.h>
// #include <stdint.h>
// #include <string.h>

// // extern void onReceiveData();

// char main_data[1024] = {0};
// void clear_main_data()
// {
//     int len = sizeof(main_data);
//     int i;
//     for (i = 0; i < len; i++)
//     {
//         main_data[i] = '\0'; // 或 str[i] = 0;
//     }
// }

// // void onReceiveData(uint8_t *data, int length)
// // {
// //     printf("receive:%s,len:%d\n", data, length);
// //     clear_main_data();
// //     strcpy(main_data, (char*)data);
// // }



// //void send_byte(uint8_t data)
// //{
// //    usart_data_transmit(USART0, data);
// //    while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
// //        ;
// //}

// //int fputc(int ch, FILE *f)
// //{
// //    send_byte((uint8_t)ch);
// //    return ch;
// //}

// void usart0_rx_config(){
	
// 		//配置gpio模式:复用
// 	gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_NONE,GPIO_PIN_10);
// 	//选择具体复用功能几,USART0_TX功能复用
// 	//a9脚交给复用功能7控制,
// 	gpio_af_set(GPIOA,GPIO_AF_7,GPIO_PIN_10);
	
// 	//开启接收功能
// 	usart_receive_config(USART0,USART_RECEIVE_ENABLE);
	
// 	//开启中断功能
// 	//参数1:系统预设的USART0的中断函数为USART0_IRQn
// 	//参数2:抢占优先级
// 	//参数3:响应优先级
// 	nvic_irq_enable(USART0_IRQn,2,2);
	
// 	//开启rbne(receive buff not empty)中断接收中断
// 	//当接收缓存区非空,会自动调用中断函数
// 	usart_interrupt_enable(USART0,USART_INT_RBNE);
	
// 	//开启idle中断,
// 	usart_interrupt_enable(USART0,USART_INT_IDLE);
	
// 	//打开usart总开关
// 	usart_enable(USART0);
	
// }

// //存数据
// uint8_t data[1024] = {0};
// //下标
// uint16_t data_index = 0;

// /**
//  * 中断函数
// */
// //void USART0_IRQHandler(void){
// //	//该函数会被2个中断自动调用,需要区分是哪个中断
// //	if(usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE)==SET){
// //		//
// //		//1.清理标记
// //		usart_interrupt_flag_clear(USART0,USART_INT_FLAG_RBNE);
// //		//从数据缓冲寄存器读数据
// //		data[data_index] = (uint8_t)usart_data_receive(USART0);
// //		data_index++;
// //		
// //	} 
// //	
// //	if(usart_interrupt_flag_get(USART0,USART_INT_FLAG_IDLE)==SET){
// //		//下边代码无效
// //		//usart_interrupt_flag_clear(USART0,USART_INT_FLAG_IDLE);
// //		
// //		//读取清理一下idle标准,否则一直打印
// //		usart_data_receive(USART0);
// //		
// //		//
// //		data[data_index] = '\0';
// //		
// //		
// //		//将代码交个用户
// //		onReceiveData(data,data_index);
// //		data_index = 0;
// //		
// //	}
// //}





// /**
//  * 串口0的初始化,
//  */
// void usart0_config()
// {
//     // 配置gpio引脚,
//     // 打开gpio时钟
//     rcu_periph_clock_enable(RCU_GPIOA);
//     /// printf("打开gpio时钟");
//     // 配置gpio模式:复用串行发送Usart0_tx功能
//     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);
//     // 选择具体复用功能几,USART0_TX功能复用
//     // a9脚交给复用功能7控制,
//     gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);
//     // 配置推挽模式
//     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_9);

//     // 串口相关配置
//     // 串口时钟使能
//     rcu_periph_clock_enable(RCU_USART0);
//     // 对串口初始化

//     usart_deinit(USART0);

//     // 波特率设置:115200
//     usart_baudrate_set(USART0, 115200);
//     // 校验位:无
//     usart_parity_config(USART0, USART_PM_NONE);
//     // 设置字宽:可选5-8bit
//     usart_word_length_set(USART0, USART_WL_8BIT);
//     // 停止位设置
//     usart_stop_bit_set(USART0, USART_STB_1BIT);
//     // 设置先发送低位还是先发送高位:低位优先
//     usart_data_first_config(USART0, USART_MSBF_LSB);

//     // 打开发送功能
//     usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);

//     // 打开串口:串口总开关
//     usart_enable(USART0);
// }

// void send()
// {
//     static uint8_t i = 0;
//     // 发送'
//     i++;
//     // 将被发送数据放入缓冲区,
//     usart_data_transmit(USART0, i);

//     // 如果缓冲区清空,代表串口已经把数据发出去了
//     // USART_FLAG_TBE:1表示缓冲区清空,0,代表未清空
//     // 芯片会自动置0置1
//     // 下边代码返回1,代表发送成功,
//     // 返回1,表示发送完成,否则,
//     // 等待数据发送完成
//     // USART_FLAG_TBE是串口通信中用于指示发送缓冲区空（Transmit Buffer Empty）的状态标志
//     while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
//     {
//     }

//     delay_1ms(1000);
// }












